package com.jingdianjichi.subject.common.entity;

import lombok.Data;

import java.io.Serializable;
import java.util.Collections;
import java.util.List;

/**
 * @Description:分页返回实体
 * @Author: longqizu
 * @Date: 2024/2/20 9:33
 */
@Data
public class PageResult<T> implements Serializable {
    private Integer pageNo = 1;
    private Integer pageSize = 20;
    private Integer total = 0;
    private Integer totalPages = 0;
    private List<T> result = Collections.emptyList();
    private Integer start = 1;
    private Integer end = 0;

    public void setRecords(List<T> result) {
        this.result = result;
        if (result != null && result.size() > 0) {
            setTotal(result.size());
        }
    }

    /**
     *计算总页数（totalPages），通过总记录数除以分页大小得到商，再加上余数是否为0的条件判断，
     * 如果余数不为0，则总页数加1。
     * 否则，如果分页大小小于等于0，将总页数（totalPages）设置为0。
     *
     * 计算起始记录位置（start）。如果分页大小大于0，使用当前页码（pageNo）计算起始记录位置，否则将起始位置设置为1。
     * 计算结束记录位置（end）。通过起始位置、分页大小和页码来计算结束位置，确保不超过总记录数
     */
    public void setTotal(Integer total) {
        this.total = total;
        if (this.pageSize > 0) {
            this.totalPages = (total / this.pageSize) + (total % this.pageSize == 0 ? 0 : 1);
        } else {
            this.totalPages = 0;
        }
        this.start = (this.pageSize > 0 ? (this.pageNo - 1) * this.pageSize : 0) + 1;
        this.end = (this.start - 1 + this.pageSize * (this.pageNo > 0 ? 1 : 0));
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

   public void setPageNo(Integer pageNo) {
        this.pageNo = pageNo;
    }


}
